#include "albumwindow.h"
#include "ui_albumwindow.h"
#include "imagebutton.h"

#include <QTimer>

//构建图片链表
QStringList *imgList = new QStringList;
//指定图片的存储目录
QString IMAGEPATH = "/even/albumJPG";
////索引链表的节点位置
//int num = 0;
////创建定时器用于播放图片
//QTimer *timer;

AlbumWindow::AlbumWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::AlbumWindow)
{
    ui->setupUi(this);
    show_back_gif();
    //初始化一个定时器
    timer = new QTimer(this);
    //关联播放图片的函数
    connect(timer, &QTimer::timeout, this, QOverload<>::of(&AlbumWindow::update));
    //枚举目录，entryList()获取指定目录中的文件和子目录列表
    QDir dir(IMAGEPATH);
    *imgList = dir.entryList(QDir::Files); // 获取目录中的文件列表

    // 创建布局器--图片按键列表
    QVBoxLayout *layout = new QVBoxLayout;
    for (auto tmp = imgList->begin();tmp != imgList->end();tmp++)
    {
        qDebug()<<*tmp;
        QString imgPath = IMAGEPATH + "/" + *tmp;
        qDebug()<<imgPath;
        ImageButton *btn = new ImageButton(imgPath.right(imgPath.size()-(imgPath.lastIndexOf("/")+1)),imgPath);
        connect(btn, &QPushButton::clicked, this, &AlbumWindow::onImageButtonClicked);
        layout->addWidget(btn);
    }
    // 将布局器加到容器下面
    ui->scrollArea->widget()->setLayout(layout);
}

AlbumWindow::~AlbumWindow()
{
    delete ui;
}

//定时器响应函数：循环播放图片--下一张
void AlbumWindow::update()
{
    qDebug() << "下一张:"<<num;
    QPixmap map(IMAGEPATH+"/"+imgList->at(num));
    qDebug()<<"当前:"<<IMAGEPATH+"/"+imgList->at(num);
    // 将图片显示在label中，图片原尺寸，宁且居中显示
//    ui->label->width();
    //判断图片大小是否比label大--改变label的尺寸
    set_label_size(map.width(),map.height());
    ui->label->setPixmap(map);
    ui->label->setAlignment(Qt::AlignCenter);
    // 将图片的名称和大小放到image_name和image_size中
    ui->img_name->setText(imgList->at(num));
    ui->img_size->setText(QString::number(map.width())+"*"+QString::number(map.width()));
    num++;
    if(num > imgList->size()-1)
        num = 0;
}

//显示动态背景图
void AlbumWindow::show_back_gif()
{
    QMovie *movepic = new QMovie(QString::fromLocal8Bit(":/new/prefix1/back.gif"));
    movepic->setScaledSize(ui->backGif->size());
    ui->backGif->setMovie(movepic);
    movepic->start();
}

//判断图片大小是否比label大--改变label的尺寸
void AlbumWindow::set_label_size(int width,int height)
{
    //宽
    if(width > ui->label->width() && height < ui->label->height())
    {
        ui->label->setMinimumHeight(400);
        ui->label->setMaximumHeight(400);
        ui->label->setMinimumWidth(width);
        ui->label->setMaximumWidth(width);
    }
    //高
    if(height > ui->label->height() && width < ui->label->width())
    {
        ui->label->setMinimumHeight(height);
        ui->label->setMaximumHeight(height);
        ui->label->setMinimumWidth(480);
        ui->label->setMaximumWidth(480);
    }
    //宽--高-->
    if(height > ui->label->height() && width > ui->label->width())
    {
        ui->label->setMinimumHeight(height);
        ui->label->setMaximumHeight(height);
        ui->label->setMinimumWidth(width);
        ui->label->setMaximumWidth(width);
    }
    //宽--高--<
    if(height < ui->label->height() && width < ui->label->width())
    {
        ui->label->setMinimumHeight(400);
        ui->label->setMaximumHeight(400);
        ui->label->setMinimumWidth(480);
        ui->label->setMaximumWidth(480);
    }
}

//点击预览图片，并显示在label中
void AlbumWindow::onImageButtonClicked()
{
    // 获取图片按键的容器中被点击的按键
    ImageButton *button = qobject_cast<ImageButton*>(sender());
    // 根据按键的图片路径设置Pixmap用于显示图片
    QPixmap map(button->imgPath);
    qDebug()<<"你点击了:"<<button->imgPath;
    // 将图片显示在label中，图片原尺寸，宁且居中显示
    //判断图片大小是否比label大--改变label的尺寸
    set_label_size(map.width(),map.height());
    ui->label->setPixmap(map);
    ui->label->setAlignment(Qt::AlignCenter);
    // 将图片的名称和大小放到image_name和image_size中
    ui->img_name->setText(button->imgName);
    ui->img_size->setText(QString::number(map.width())+"*"+QString::number(map.width()));

    qDebug() << "当前张:"<<num;
    // 获取该图片在链表中的位置，更新索引号
    for (int i = 0;i < imgList->size(); i++)
    {
        if(imgList->at(i) == button->imgName)
        {
            num = i;
        }
    }
}

//手动显示图片--上一张
void AlbumWindow::on_prev_img_btn_clicked()
{
    qDebug() << "上一张:"<<num;
    QPixmap map(IMAGEPATH+"/"+imgList->at(num));
    qDebug()<<"当前:"<<IMAGEPATH+"/"+imgList->at(num);
    // 将图片显示在label中，图片原尺寸，宁且居中显示
    //判断图片大小是否比label大--改变label的尺寸
    set_label_size(map.width(),map.height());
    ui->label->setPixmap(map);
    ui->label->setAlignment(Qt::AlignCenter);
    // 将图片的名称和大小放到image_name和image_size中
    ui->img_name->setText(imgList->at(num));
    ui->img_size->setText(QString::number(map.width())+"*"+QString::number(map.width()));
    num--;
    if(num < 0)
        num = imgList->size()-1;
}

//手动显示图片--下一张
void AlbumWindow::on_next_img_btn_clicked()
{
    qDebug() << "下一张:"<<num;
    QPixmap map(IMAGEPATH+"/"+imgList->at(num));
    qDebug()<<"当前:"<<IMAGEPATH+"/"+imgList->at(num);
    // 将图片显示在label中，图片原尺寸，宁且居中显示
    //判断图片大小是否比label大--改变label的尺寸
    set_label_size(map.width(),map.height());
    ui->label->setPixmap(map);
    ui->label->setAlignment(Qt::AlignCenter);
    // 将图片的名称和大小放到image_name和image_size中
    ui->img_name->setText(imgList->at(num));
    ui->img_size->setText(QString::number(map.width())+"*"+QString::number(map.width()));
    num++;
    if(num > imgList->size()-1)
        num = 0;
}

//自动循环播放图片--按键状态改变--开启或关闭定时器
void AlbumWindow::on_start_or_stop_btn_clicked()
{
//    // 静态变量在初始化时执行一次
//    static int flag = 0;
    if(flag == 0)//开始播放
    {
        ui->start_or_stop_btn->setStyleSheet("border-image: url(:/new/prefix1/stop.png);");
        flag = 1;
        timer->start(1000);
    }
    else//停止播放
    {
        ui->start_or_stop_btn->setStyleSheet("border-image: url(:/new/prefix1/start.png);");
        flag = 0;
        timer->stop();
    }
}

//返回上个界面--功能界面
void AlbumWindow::on_Return_Btn_clicked()
{
    //因为在跳转时，记录了上一个界面
    //所以可以利用此函数获取当前窗口的父窗口对象指针
    QWidget *parent = this->parentWidget();

    parent->show();//把之前父界面的隐藏状态改为显示状态，显示父界面
    //关闭定时器
    timer->stop();
    this->close();//关闭当前界面
}
